Java Swingworker 和多线程
全部标签 我创建了一个JavaGUI应用程序,它作为许多低级外部进程的包装器。该实用程序按原样运行,但迫切需要一项重大改进。我希望我的外部进程以非阻塞方式运行,这将允许我并行处理其他请求。简而言之,我希望能够在生成数据时处理来自外部进程的数据。但看起来我检查外部进程是否仍在运行的基本尝试正在阻塞。下面是我的ExternalProcess类的摘录。有关线程和阻塞的特定Java功能问题,请参阅内联评论。publicvoidExecute(){System.out.println("Startingthread...\n");Runner=newThread(this,"ExternalProcess
我有一个非常简单的爬虫。我想让我当前的代码在几个线程中运行。你能给我一些教程或文章来帮助我完成这个测试吗?我最初是一名.Net开发人员,在.Net中,我在多线程中运行代码没有任何问题,但不幸的是,我对Java中的线程一无所知。我的爬虫是一个命令行软件,所以不用担心GUI。提前谢谢你。 最佳答案 Java通过Thread类来实现多线程。使现有代码成为多线程的最常见方法之一是使用Runnable接口(interface)定义您希望在线程启动时调用的内容,然后启动它。publicclassSomeFunctions{publicstati
我从我的同步方法中调用了noonsynchronized方法,它是线程安全的吗?我有如下两种方法:publicclassMyClass{voidsynchronizeddoSomething1(){doSomething2();}voiddoSomething2(){//willthisblockofcodebesynchronizedifcalledonlyfromdoSomething1??}} 最佳答案 如果doSomething2()仅从doSomething1()调用,则它只会被单个线程调用用于的单个实例我的类(class
我了解到swing不是线程安全的。深入研究,我发现对swing组件的每次修改都必须在事件调度线程上完成,以防止与多线程相关的各种问题。然而,信息似乎就此止步了。似乎没有很好的教程来解释如何在Internet上的任何地方执行此操作。将发布的代码中与其他问题相关的信息拼凑在一起,似乎我必须在我的程序中的每个swing修改周围放置一个不整洁的代码块(就像我自己代码中的这个例子):try{SwingUtilities.invokeAndWait(newRunnable(){publicvoidrun(){setTitle("Frametitle");setDefaultCloseOperati
在我的Web应用程序中,我尝试使用JavaSDK7WatchService创建一个目录轮询bean。我想要实现的是在它自己的线程中运行这个bean,这样它就不会阻塞应用程序。像这样的东西: 最佳答案 恐怕您将不得不使用Spring手动创建此线程:WatchServiceRunnableWrapper很简单:publicclassWatchServiceRunnableWrapperimplementsRunnable{privateWatchServiceWatchService;publicWatchServiceRunnable
如果此方法的变量“commonSet”改为类级字段,以下代码是否会导致同样的问题。如果它是一个类级别的字段,我将不得不在一个同步块(synchronizedblock)中将添加到集合操作包装起来,因为HashSet不是线程安全的。我是否应该在下面的代码中做同样的事情,因为多个线程正在添加到集合中,甚至当前线程可能会继续改变集合。publicvoidthreadCreatorFunction(finalString[]args){finalSetcommonSet=newHashSet();finalRunnablerunnable=newRunnable(){@Overridepubl
我有一个大的(5GB)hprof转储,它是在OutOfMemoryError发生时由应用程序创建的。(使用XX:HeapDumpOnOutOfMemoryError)。不幸的是,发生此错误时没有收集日志。重新创建它需要几个小时。我希望是否有一些工具可以显示来自hprof的异常堆栈跟踪或所有线程堆栈等。我目前正在使用MAT,看不到获取线程信息的方法。我可以使用哪个工具?(不知道hprof文件有没有OOM时线程/调用位置的信息)(我确实知道在正常情况下如何进行线程转储。这里的问题是事件已经发生,我只有hprof转储。) 最佳答案 回答自
我的Java.NIO套接字服务器中有一个线程池。我有时会收到运行时错误,例如Connectionresetbypeer或BrokenPipe等。我的问题是:抛出异常时线程是否被杀死?如果是-是否在线程池中创建了一个新线程来代替被杀死的线程??这是我的线程管理器:importjava.nio.channels.SocketChannel;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassThreadsManager{privateExecutorServic
这是我的两个类:publicclassFirstclass{publicstaticvoidmain(Stringargs[])throwsInterruptedException{System.out.println("Mainstart....");Secondclasst1=newSecondclass();t1.setName("FirstThread");Secondclasst2=newSecondclass();t2.setName("SecondThread");t1.start();t2.start();System.out.println("Mainclose...
简短的问题:在Tomcat6应用程序中-我如何运行(单独的)线程池?运行线程池的最佳解决方案是什么?长问题:我这里有一个简单的需求;轮询数据库以获取某些数据,同时允许Web客户端等待答案(长轮询连接)。当该数据在数据库中可用时,我会向相关客户发送回复。话虽如此,我宁愿目前不深入研究任何框架(quartzscheduler也许吧?)。因此,正如我得出的结论,我需要一个线程池来在后台完成这项工作。那么如果我要使用Thread(实际上是Runnable),哪个类可以组织这一切?有排序吗ThreadPool解决方案?有什么推荐吗? 最佳答案